package tec;

abstract class TestPassagerAbstrait {

    abstract protected PassagerAbstrait creerPassager(String nom, int destination);

    void testFaussaire() {
	FauxBus f = new FauxBus();
	f.status = FauxBus.ASSIS;
	
	assert 0 == f.messages.size();
	
	f.demanderChangerEnDebout(null);
	
	assert "demanderChangerEnDebout" == f.messages.getLast();
    }

    void testEtatNouveauPassager(){
	PassagerAbstrait ps = creerPassager("passager1", 2);
	assert ps.estDehors() : "estDehors";
    }
  
    void testAccepterPlaceDebout(){
	PassagerAbstrait ps = creerPassager("passager1", 2);
	ps.accepterPlaceDebout();
	assert ps.estDebout() : "estDebout";
    }
    
    void testAccepterPlaceAssise(){
	PassagerAbstrait ps = creerPassager("passager1", 2);
	ps.accepterPlaceAssise();
	assert ps.estAssis() : "estAssis";
    }
  
    void testAccepterSortie(){
	PassagerAbstrait ps = creerPassager("passager1", 2);
	ps.accepterPlaceDebout();
	ps.accepterSortie();
	assert ps.estDehors() : "estDehors";
    }

    void testNouvelArret(){
	FauxBus f = new FauxBus();
	PassagerAbstrait ps = creerPassager("passager1", 3);
	ps.accepterPlaceAssise();

	// numero d'arret < a la destination
	ps.nouvelArret(f, 2);
	assert 0 == f.messages.size() : "pas a destination " ;

	// numero d'arret >= a la destination 
	ps.nouvelArret(f, 3);
	assert "demanderSortie" == f.messages.getLast() : "arrive a destination";
	
    }

    void lancer (){
	int nbTest=0;

	System.out.print('.'); nbTest++;
	testFaussaire();
	
	System.out.print('.'); nbTest++;
	testEtatNouveauPassager();
	
	System.out.print('.'); nbTest++;
	testAccepterPlaceDebout();
	
	System.out.print('.'); nbTest++;
	testAccepterPlaceAssise();
	
	System.out.print('.'); nbTest++;
	testAccepterSortie();

	System.out.print('.'); nbTest++;
	testNouvelArret();

	System.out.println("(" + nbTest + "):OK: " + getClass().getName()); 

    }
}
